
[dbo].[asi_AccessPermission]
CREATE PROC asi_AccessPermission
@accessKey uniqueidentifier,
@userKey uniqueidentifier
AS
BEGIN
SET NOCOUNT ON
CREATE TABLE #permission (Permission int NULL)
INSERT #permission (Permission)
VALUES (0)
INSERT #permission
SELECT DISTINCT AccessItem.Permission
FROM AccessItem
WHERE AccessItem.AccessKey = @accessKey
AND AccessItem.UserKey = @userKey
AND NOT EXISTS(SELECT 1 FROM #permission where Permission = AccessItem.Permission)
IF NOT EXISTS(SELECT 1 FROM #permission where Permission = 1)
BEGIN
INSERT #permission
SELECT DISTINCT AccessItem.Permission
FROM AccessItem
INNER JOIN UserRole on AccessItem.RoleKey = UserRole.RoleKey
WHERE AccessItem.AccessKey = @accessKey
AND UserRole.UserKey = @userKey
AND NOT EXISTS(SELECT 1 FROM #permission where Permission = AccessItem.Permission)
END
IF NOT EXISTS(SELECT 1 FROM #permission where Permission = 1)
BEGIN
INSERT #permission
SELECT DISTINCT AccessItem.Permission
FROM AccessItem
INNER JOIN ListItem on AccessItem.GroupKey = ListItem.ListKey
INNER JOIN GroupItem on ListItem.ListItemKey = GroupItem.GroupItemKey
WHERE AccessItem.AccessKey = @accessKey
AND ListItem.ObjectKey = @userKey
AND GroupItem.IsDisabled = 0
AND (GroupItem.EffectiveDate <= getdate() OR GroupItem.EffectiveDate IS NULL)
AND (GroupItem.ExpirationDate >= getdate() OR GroupItem.ExpirationDate IS NULL)
AND NOT EXISTS(SELECT 1 FROM #permission where Permission = AccessItem.Permission)
END
SELECT SUM(Permission)
FROM #permission
DROP TABLE #permission
SET NOCOUNT OFF
END
GO